// 请求响应参数（不包含data）
export interface Result {
  code: string;
  msg: string;
}

// 请求响应参数（包含data）
export interface ResultData<T = any> extends Result {
  data: T;
}

// 分页响应参数
export interface ResPage<T> {
  list: T[];
  pageNum: number;
  pageSize: number;
  total: number;
}

// 分页请求参数
export interface ReqPage {
  pageNum: number;
  pageSize: number;
}

// 文件上传模块
export namespace Upload {
  export interface ResFileUrl {
    fileUrl: string;
  }
}

// 登录模块
export namespace Login {
  export interface ReqLoginForm {
    username: string;
    password: string;
  }
  export interface ResLogin {
    access_token: string;
  }
  export interface ResAuthButtons {
    [key: string]: string[];
  }
}

export namespace User {
  export interface ResUser {
    id: string;
    userName: string;
    password: string;
    /**所属企业编号 */
    companyID: string;
  }
}

//工序管理模块
export namespace Process {
  export interface ResProcess {
    id: string; // ID
    processId: string; // 工序ID
    processName: string; // 工序名称
    equipmentId?: string; // 设备名称
    description: string; // 描述
    createTime: string; // 创建时间
  }
}

//设备管理模块
export namespace Equipment {
  export interface ResEquipment {
    id: string;
    equipmentId: string; // 设备编号
    equipmentName: string; // 设备名称
    ratedPower: number; // 额定功率
    functionDescription: string; // 功能描述
    safetyInstructions: string; // 操作文本
    createTime?: string; // 创建时间
    owner?: string;
  }
}

//碳排因子管理模块
export namespace EmissionFactor {
  export interface ResEmissionFactor {
    id: string; // 唯一标识
    factorId: string; // 因子编号
    factorLabel: string; // 因子名称
    factorName: number; // 排放因子类型
    factorValue: number; // 因子数值
    factorUnit: number; // 因子单位
    region: number; // 地区
    source: string; // 数据来源
    dataYear: string; // 数据时间(年份)
    createTime?: string; // 创建时间
  }
}

// 供应商管理模块
export namespace Supplier {
  export interface ResSupplier {
    id: string; // 唯一标识
    supplierLicense: string; // 供应商营业执照编号
    supplierName: string; // 供应商名称
    contactName: string; // 联系人姓名
    contactEmail: string; // 联系人邮箱
    contactPhone: string; // 联系人电话
    createTime?: string; // 创建时间
  }
}

// 产品管理模块
export namespace Product {
  export interface ResProduct {
    id: string; // 产品唯一标识
    productId: string; // 产品编号
    productName: string; // 产品名称
    description: string; // 产品描述
    createTime?: string; // 创建时间
    treeId: string; //对应的产品结构树id
    owner?: string;
  }
}

//产品结构树
export namespace ProductTree {
  // 定义边的接口
  export interface Edge {
    source: number; // 边的起点节点号
    target: number; // 边的终点节点号
  }
  export interface Node {
    id: number; // 物料ID
    materialName: string; // 物料名称
    sourceType: number; // 来源类型，1自制，2外购
  }
  export interface NodeLocation {
    index: number;
    x: number;
    y: number;
  }

  // 定义响应数据的接口，其中包含树的标识符和根节点
  export interface ResProduct_Tree {
    productName: string; // 产品名称
    edge: Edge[]; // 边数组
    node: Node[]; // 节点详细数据
  }
}

/**物料管理模块接口 */
export namespace Material {
  export interface ResMaterial {
    id: number; // 物料唯一标识
    materialName: string; // 物料名称
    owner: number;
    /**1零件，2部件，3原材料 */
    materialType: number;
    /**1自制，2外购 */
    sourceType: number;
    processIds?: string[]; // 关联的工艺流程ID数组
    createTime?: string; // 创建时间+
    pcfValue?: number; // 物料对应的PCF值
    /**0：未申请，1：正在审核，2：审核通过，3：审核失败 */
    status?: number;
  }
}

/**物料管理模块接口 */
export namespace Project {
  export interface outPCF {
    /**project中涉及到的外购物料id（material编号） */
    outMaterialID: string;
    PCF: number;
    /**0：未申请，1：正在审核，2：审核通过，3：审核失败 */
    status: number;
  }
  export interface ResProject {
    /**项目唯一标识 */
    id: string;
    /**用户编号 */
    userName: string;
    /**产品编号 */
    productId: string;
    /**项目开始时间 */
    projectStart: string;
    /**项目结束时间 */
    projectEnd: string;
    /**外购产品对应PCF序列 */
    outPCFs: outPCF[];
  }
}

/**数据请求记录接口 */
export namespace PCFrequest {
  export interface ResPCFrequest {
    /**请求唯一标识 */
    id: string;
    /**请求发起方编号 */
    startUser: string;
    /**请求接收方编号 */
    endUser: string;
    /**该数据请求对应的项目编号 */
    projectId: string;
    /**申请获取PCF的外购产品MPpair编号 */
    MPpairId: string;
    /**申请时间 */
    requestTime: string;
    /**1代表接受，2代表拒绝 */
    status?: number;
  }
}

/**材料与产品的对应关系 */
export namespace MPpair {
  export interface ResMPpair {
    /**请求唯一标识 */
    id: string;
    /**材料id */
    materialId: string;
    /**产品id */
    productId: string;
  }
}

// 分配数据模块
export namespace Allocation {
  export interface AllocationRequest {
    totalEnergy: TotalEnergy; // 总能耗
    organizationLayer: OrganizationLayer;
    productionLineLayer: ProductionLineLayer;
    productLayer: ProductLayer;
    equipmentLayer: EquipmentLayer;
  }

  export interface TotalEnergy {
    waterUsage?: string | null;
    electricityUsage?: string | null;
    gasUsage?: string | null;
    oilUsage?: string | null;
  }

  export interface OrganizationLayer {
    method: "预估能耗" | "专家意见" | null;
    parameters: {
      productionEnergy?: string | null;
      officeEnergy?: string | null;
      expertPercentage: number;
    };
  }

  export interface ProductionLineLayer {
    method: "产品产量" | "专家意见" | null;
    parameters: {
      productQuantity?: string | null;
      totalProductQuantity?: string | null;
      expertPercentage: number;
    };
  }

  export interface ProductLayer {
    method: "产品产量" | "产品生产时长" | null; // 选择的分配方法
    parameters: {
      // 产量相关参数
      productQuantity?: string | null; // 产品产量
      totalProductQuantity?: string | null; // 所有产品产量
      // 生产时长相关参数
      productProcessingTime?: string | null; // 产品加工时长
      totalProcessingTime?: string | null; // 产品总加工时长
    };
  }

  // 修改设备层的数据结构
  export interface EquipmentData {
    equipmentId: number | string; // 设备ID
    equipmentName: string | null; // 设备名称
    estimatedEnergy: string | null; // 设备预计能耗
    totalEstimatedEnergy: string | null; // 所有设备预计能耗
  }

  export interface EquipmentLayer {
    method: "预估能耗" | null; // 选择的分配方法
    equipmentList: EquipmentData[]; // 设备列表
  }

  // 分配数据主结构
  export interface AllocationList {
    projectId: string; // 碳足迹项目ID
    processNames: string[]; // 存储所有需要分配的工艺名称
    totalEnergy: TotalEnergy; // 整体项目的总能耗
    organizationLayer: OrganizationLayer; // 组织层数据
    productionLineLayer: ProductionLineLayer; // 产线层数据
    productLayer: ProductLayer; // 产品层数据
    equipmentLayer: EquipmentLayer; // 设备层数据
  }
}

//清单分析工艺流程建模
export namespace FlowChart {
  // 主流程图数据结构
  export interface ResFlowChart {
    projectId: string; // 项目ID
    objectId: string; // 对象ID
    objectType: string; // 1物料 2产品
    nodes: FlowChartNode[]; // 流程图节点数组
  }
  export interface FlowChartNode {
    nodeId: string; // 流程图节点ID
    process: Process.ResProcess; // 工艺流程数据
    equipmentName: string; // 设备名称
    inputNodes: InputNode[]; // 输入类型的节点信息
    outputNodes: OutputNode[]; // 输出类型的节点信息
  }

  // 输入类型的节点
  export interface InputNode {
    inputConsumption?: number; // 输入消耗量
    inputUnit?: number; // 输入单位
    inputType: number; // 输入类型（水电气油）
    dataSource: string; // 数据来源
    XLocation: number;
    YLocation: number;
    inputPCF?: number;
  }

  // 输出类型的节点
  export interface OutputNode {
    outputName: string; // 输出名称
    outputType: number; // 输出类型（固液气）
    outputConsumption?: number; // 输出消耗量
    outputUnit?: number; // 输出单位
    XLocation: number;
    YLocation: number;
    outputPCF?: number;
  }
}

//基础数据管理产品工艺流程节点返回格式
export namespace ProcessNode {
  export interface ProcessNode {
    productId: string; // 流程图对应的产品id
    productName: string; // 流程图对应的产品名称
    nodes: Node[]; // 工艺节点列表
  }

  export interface Node {
    nodeId: string; // 工艺节点ID
    order?: number; // 节点顺序
    process: Process.ResProcess; // 工艺信息
    equipment?: Equipment.ResEquipment; // 设备信息
    materials: Material.ResMaterial[]; // 物料信息
  }
}

// 能耗分配模块
export namespace EnergyAllocation {
  export interface EnergyAllocationRequest {
    // 能耗分配请求
    projectId: string; // 项目ID
    processName: string; // 工艺名称
  }
  export interface AllocationInput {
    inputType: number; // 输入类型
    inputConsumption: string; // 能耗值
    inputUnit: number; // 单位
  }

  export interface EnergyAllocationResponse {
    // 能耗分配响应
    processName: string; // 工艺名称
    allocationInput: AllocationInput[]; // 输入能耗分配
  }
}

//目标与范围模块
export namespace PurposeScope {
  export interface PurposeScopeData {
    /** 项目唯一标识 */
    projectId: string;
    /** 项目名称 */
    projectName: string;
    /** 项目目的 */
    purpose: string;
    /** 产品编号 */
    productId: string;
    /** 产品标识 */
    id: string;
    /** 产品名称 */
    productName: string;
    /** 系统边界 */
    systemBoundary: string;
    /** 功能单元 */
    functionalUnit: string;
    /** 数据采集时间 */
    dataCollectionTime: string[];
    /** 碳足迹核算依据 */
    accountingBasis: string;
    /** 碳足迹核算方法 */
    accountingMethod: string;
    /** 数据采集原则 */
    dataPrinciple: string;
    /** 数据质量 */
    dataQuality: string;
  }
}

// 用户管理模块
export namespace User {
  export interface ReqUserParams extends ReqPage {
    username: string;
    gender: number;
    idCard: string;
    email: string;
    address: string;
    createTime: string[];
    status: number;
  }
  export interface ResUserList {
    id: string;
    username: string;
    gender: number;
    user: { detail: { age: number } };
    idCard: string;
    email: string;
    address: string;
    createTime: string;
    status: number;
    avatar: string;
    photo: any[];
    children?: ResUserList[];
  }
  export interface ResStatus {
    userLabel: string;
    userValue: number;
  }
  export interface ResGender {
    genderLabel: string;
    genderValue: number;
  }
  export interface ResDepartment {
    id: string;
    name: string;
    children?: ResDepartment[];
  }
  export interface ResRole {
    id: string;
    name: string;
    children?: ResDepartment[];
  }
}

// 工艺碳排放清单模块
export namespace ProcessCarbonEmission {
  // 输入节点的碳排放数据
  export interface FlowChartNode {
    nodeId: string; // 流程图节点ID
    process: Process.ResProcess; // 工艺流程数据
    equipmentName: string; // 设备名称
    inputNodes: InputNode[]; // 输入类型的节点信息
    outputNodes: OutputNode[]; // 输出类型的节点信息
  }

  // 输入类型的节点
  export interface InputNode {
    inputConsumption: number; // 输入消耗量
    inputUnit: number; // 输入单位
    inputType: number; // 输入类型（水电气油）
    dataSource: string; // 数据来源
    XLocation: number;
    YLocation: number;
    inputPCF?: number;
  }

  // 输出类型的节点
  export interface OutputNode {
    outputName: string; // 输出名称
    outputType: number; // 输出类型（固液气）
    outputConsumption: number; // 输出消耗量
    outputUnit: number; // 输出单位
    XLocation: number;
    YLocation: number;
    outputPCF?: number;
  }
  // 工艺碳排放清单主结构
  export interface ProcessCarbonEmission {
    projectId: string; // 项目ID
    objectId: string; // 对象ID
    nodes: FlowChartNode[]; // 节点列表
  }
}

// 自制碳排放源分析模块
export namespace SelfMadeEmission {
  export interface ResSelfMadeEmission {
    projectId: string; // 项目ID
    processId: string; // 工序编号
    processName: string; // 工序名称
    emissions: string; // 碳排放源描述
  }
}

// 装配流程模块
export namespace AssemblyProcess {
  export interface ResAssemblyProcess {
    id: string;
    productId: string;
    processIds?: string[]; // 关联的工艺流程ID数组
  }
}

// 设备绑定模块
// export namespace ProcessEquipment {
//   // 产品-物料-工序-设备的绑定关系
//   export interface ProductMaterialProcessBinding {
//     id: string; // 绑定关系ID
//     productId: string; // 产品ID
//     productName: string; // 产品名称
//     materials: MaterialProcessBinding[]; // 产品包含的物料及其工序绑定
//   }

//   // 物料-工序-设备绑定
//   export interface MaterialProcessBinding {
//     materialId: string; // 物料ID
//     materialName: string; // 物料名称
//     processes: ProcessEquipmentBinding[]; // 物料包含的工序设备绑定
//   }

//   // 工序-设备绑定
//   export interface ProcessEquipmentBinding {
//     processId: string; // 工序ID
//     processName: string; // 工序名称
//     equipmentId: string; // 设备ID
//     equipmentName: string; // 设备名称
//     ratedPower: number; // 设备额定功率
//   }
// }
